﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using System.Drawing;
using Website.Logger;
using DAL;
using BOL;
using System.Web.Script.Services;
using System.Web.Services;
using WebLib;
using UtilityExtensions;

namespace UILGestion.ObraAdmin.Comparativos
{
    public partial class ComparativoInsertForm : PageBaseForm
    {

        public ComparativoInsertForm()
        {
            bol = new ComparativoBL();
            ECBol = new EstructuraCostoBL();
        }


        private EstructuraCostoBL ECBol;
        private ComparativoBL bol;



        [WebMethod(), ScriptMethod()]
        public static string GetRecursos(String prefixText, String contextKey)
        {

            dbGestionDataContext _db =
                new dbGestionDataContext(Parametros.strConnString);

            var p = (from a in _db.view_Insumo
                     where (a.codigo + a.descripcion).Contains(prefixText) &
                     a.idPadre==17003
                                      select new {
                         a.idInternal,
                         a.codigo,
                         a.descripcion,
                         a.unidad}).Take(10);



            return Util.Tbl2Str(Util.EntidadToDataTable(p));

        }
        [WebMethod(), ScriptMethod()]
        public static string GetProveedor(String prefixText, String contextKey)
        {

            ProveedorBL bol = new ProveedorBL();
            return bol.getProveedorAll(prefixText, 20);

        }

        [WebMethod(), ScriptMethod()]
        public static string GetRecursoContrata(String prefixText, String contextKey)
        {

            using (dbGestionDataContext _db =
                new dbGestionDataContext(Parametros.strConnString))
            {

                var p = (from a in _db.view_Insumo
                         where (a.codigo + a.descripcion).Contains(prefixText) &
                         a.idAbuelo == 4
                         select new
                         {
                             a.codigo,
                             a.descripcion,
                             a.unidad

                         }).Take(30);

                dbGestionDataContext _ge = new dbGestionDataContext(Parametros.strConnString);

                return Util.Tbl2Str(Util.EntidadToDataTable(p));
            }

        }



        private void restriccionesForm()
        {
            //--------------------
            int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());

            bool acceso = new DAL.FormularioAcceso().VerificarAcceso(DbUtil.Db,
                idEmpleadoEmisor,
                2,    //comparativo
                int.Parse(idObra.Value),
                2);    //editar
            //------------------------- 
            // los paneles presentes en el formulario
            pnlMain.Visible = true;
            AddECItemParent.Visible = true;
            PanelButtom.Visible = true;
            PanelBody.Visible = true;
            //-----------------------------

        }

        private void FormatForm()
        {

            restriccionesForm();
           
         
            idComparativoProveedorList.Value = Parametros.GenerarID().ToString();
            idobjectdsLabel.Value = Parametros.GenerarID().ToString();
            
            fechaInsertTextBox.Text = DateTime.Now.ToShortDateString();

      
            List<ComparativoItemInfo> comparativoItemList = new List<ComparativoItemInfo>();
            List<ComparativoProveedorInfo> comparativoProveedorList = new List<ComparativoProveedorInfo>();

            Session[idobjectdsLabel.Value.ToString()] = comparativoItemList;
            Session[idComparativoProveedorList.Value.ToString()] = comparativoProveedorList;
            
            
            ShowAllComboBoxNew();

            var idEstructuraCosto= (string)Request.QueryString["idEC"];
            if (idEstructuraCosto.ToInt() > 0)
                estructuraCostoDDL.SelectedValue = idEstructuraCosto;
            
            BindDataProveedor();
            BindDataItemComparativo();
            setEstadistica();

           

        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {


                if (!Page.IsPostBack)
                {

                    
                    idObra.Value = (string)Request.QueryString["idObra"];
                    
                    menuObraCtrl1.loadMenu(int.Parse(idObra.Value), Request.AppRelativeCurrentExecutionFilePath);
                   

                    FormatForm();

               

                }


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

   
    


        private void setEstadistica()
        {
            List<ComparativoItemInfo> itemList=
                (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value];

            List<ComparativoProveedorInfo> proveedorItem =
                (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value.ToString()];

            //necesario por el pastbak, luego revisar
            
            if (itemList.Count() > 0)
                {
                    //totalBaseTextBox.Text = itemList.Sum(p => p.totalComparar).ToString();
                    //totalBaseTextBox.Text = itemList.ElementAt(0).simbolBase.ToString() + " " + totalBaseTextBox.Text;
                    totalBaseTextBox.Text = itemList.Sum(p => p.totalBaseOrig).ToString();
                    totalBaseTextBox.Text =  string.Format("{0} {1:N} ",itemList.ElementAt(0).simbolBase.ToString() , itemList.Sum(p => p.totalBaseOrig));
                }

            proveedor1LBL.Text = proveedorItem.Count>=2 ? proveedorItem.ElementAt(1).descripcion : "";
            total1TXT.Text = proveedorItem.Count >= 2 ? string.Format("{0} {1:N} ", proveedorItem.ElementAt(1).simbol, proveedorItem.ElementAt(1).total) : "";

            proveedor2LBL.Text = proveedorItem.Count>=3 ? proveedorItem.ElementAt(2).descripcion : "";
            total2TXT.Text = proveedorItem.Count>=3 ? string.Format("{0} {1:N} ", proveedorItem.ElementAt(2).simbol, proveedorItem.ElementAt(2).total) : "";

            proveedor3LBL.Text = proveedorItem.Count == 4 ? proveedorItem.ElementAt(3).descripcion : "";
            total3TXT.Text = proveedorItem.Count == 4 ? string.Format("{0} {1:N} ", proveedorItem.ElementAt(3).simbol, proveedorItem.ElementAt(3).total) : "";
              
                
                panelTotal.Update(); 
            
            
        }
        private void BindDataItemComparativo()
        {


            //cambioMoneda();
            ComparativoItemInfo recurso = new ComparativoItemInfo();
            List<ComparativoItemInfo> ds;
            ds = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value.ToString()];
            
            itemGridView.DataSource = ds;
            itemGridView.DataBind();
            estructuraCostoDDL.Enabled = true;
            if (ds.Count > 0)
            {
                //if (ds.Where(p=>p.idOrdenCompratemRef!=0).Count()>0)
                //{
                    estructuraCostoDDL.Enabled = false;
                //}
                
            }
            
            panelGrilla.Update();
    
        }
        private void ShowAllComboBoxNew()
        {


            var e = from i in DbUtil.Db.EstructuraCostos
                    where i.idObra == int.Parse(idObra.Value)
                    orderby i.descripcion
                    select i;

            EstructuraCosto view = new EstructuraCosto();
            view.descripcion = "-------Seleccione Estructrura Costo-----";
            view.idInternal = 0;

            List<EstructuraCosto> listaEC = new List<EstructuraCosto>();
            listaEC.Add(view);
            listaEC.AddRange(e.ToList().OrderBy(p=>p.descripcion));


            estructuraCostoDDL.DataTextField = "descripcion";
            estructuraCostoDDL.DataValueField = "idInternal";

            estructuraCostoDDL.DataSource = listaEC;
            estructuraCostoDDL.DataBind();

              
            monedaDropDownList.DataTextField = "descripcion";
            monedaDropDownList.DataValueField = "idInternal";

            monedaDropDownList.DataSource = DbUtil.Db.Monedas.ToList();
            monedaDropDownList.DataBind();

              
                monedaDropDownList.SelectedValue = "3";
               // simbolMonCompLabel.Text = monedaList.Single(p => p.idInternal == 3).simbol;
                

                Obra obra = DbUtil.Db.Obras.Single(a => a.idInternal == int.Parse(idObra.Value));
                IncluyeIGVCHK.Checked = obra.incluyeIGV.Value;

                if (obra.incluyeIGV.Value)
                {
                    IncluyeIGVLabel.Text = "Si  Incluyen IGV";
                }
                else
                {
                    IncluyeIGVLabel.Text = "No Incluyen IGV";
                }
                

                Comparativo comparativo = new Comparativo();
                numDocumentoTextBox.Text = comparativo.getCorrelativo(DbUtil.Db, int.Parse(idObra.Value));

            }

     


        //private List<view_Comparativo> GetViewObjectEntity(int id)
        //{
        //    dbGestionDataContext _db;

        //    _db = new dbGestionDataContext(Parametros.strConnString);

        //    List<view_Comparativo> objectList = new List<view_Comparativo>();
        //    view_Comparativo obj = new view_Comparativo();
        //    obj.totalBase = 0;
            


        //    var query = from p in _db.view_Comparativo
        //                where p.idInternal == id
        //                select p;

        //    if (query.Count() > 0)
        //        obj = query.First();

        //    objectList.Add(obj);
        //    return objectList;
        //}
        private DAL.Comparativo GetObjectEntity(int id)
        {
            dbGestionDataContext _db;
            _db = new dbGestionDataContext(Parametros.strConnString);

            DAL.Comparativo obj = new DAL.Comparativo();

            var query = from p in _db.Comparativos
                        where p.idInternal == id
                        select p;

            if (query.Count() > 0)
                obj = query.First();

            return obj;
        }
       


        protected void btnContinue_OnClick(object sender, EventArgs e)
        {
           try
            {
               
               if ((sender as Button).ID == saveButton.ID)
               {

                   var od = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value.ToString()];
                   
                   List<ComparativoProveedorInfo> proveedorItem =
                     (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value.ToString()];

                   int    idProveedor=proveedorItem.ElementAt(1).idProveedor; //debe esxiter 4 para considerar 3
                   
                   if  (od.Where(p=>p.idOrdenCompratemRef!=0).Count()==0)
                   {
                       
                       var w = from a in proveedorItem
                               where a.idInternal != 0
                               select new
                               {
                                   idinternal = a.idProveedor,
                                   descripcion = string.Format("<table><tr><td width='250p'>{0}</td><td width='35px' align='right' >Total:</td><td align='right'>{2} {1:N}</td></tr></table>", a.descripcion, a.total, a.simbol),
                                   bitSeleccion = a.bitSeleccion,
                                   idComparativo = a.idComparativo
                               };


                       totalBase.Text = totalBaseTextBox.Text;

                       ProveedorRadioButtonList.DataTextField = "descripcion";
                       ProveedorRadioButtonList.DataValueField = "idinternal";
                       ProveedorRadioButtonList.DataSource = w.ToList();

                       ProveedorRadioButtonList.DataBind();
                       monedaDropDownList.SelectedValue = "0";
                       seleccionPopupExtender.Show();
                       actualizaProvPanel.Update();

                   }
                   //Insertar(idProveedor);
               
            }
              
            
            if ((sender as Button).Text == "Cancelar")
            {
                Response.Redirect("ComparativoListForm.aspx?idObra="+idObra.Value);
            }
            if ((sender as Button).Text == "  refreshButton_Click")
            {
                Response.Redirect("ComparativoListForm.aspx?id=Obra="+idObra.Value);
            }

              
                   }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);
                saveButton.Enabled = true;

            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);
                saveButton.Enabled = true;
            }
        }

        //private void editObject(int id)
        //       {


        //           List<view_Comparativo> obj = new List<view_Comparativo>();
        //           List<ComparativoItemInfo> dsItem;
        //           obj = GetViewObjectEntity(id);
        //           dsItem = GetViewObjectItemEntity(id);
        //           PopulateObjectForm(obj);




        //           itemGridView.DataSource = dsItem;
        //           itemGridView.DataBind();

        //           itemGridView.Columns[itemGridView.Columns.Count - 1].Visible = true;
        //           itemGridView.Columns[itemGridView.Columns.Count - 2].Visible = true;
        //           itemGridView.FooterRow.Visible = true;

        //       }

        protected void entityForm_ModeChanging(object sender, FormViewModeEventArgs e)
        {


        }

      

        #region "seleccion de proveedores"
        protected void accionRecurso_Click(object sender, EventArgs e)
        {
            if (((LinkButton)sender).ID == "AgregarSubContrataLinkButton")
            {
                itemGridView.FooterRow.Visible = true;

            }
        }
        
        #endregion
        #region "item"

        protected void OnPaging(object sender, GridViewPageEventArgs e)
        {
            //BindData();
            //GridView1.PageIndex = e.NewPageIndex;
            //GridView1.DataBind();
        }
        //private List<ComparativoItemInfo> delTemplate(ref List<ComparativoItemInfo> ds)
        //{
        //    foreach (DataRow drw in ds.Tables[0].Rows)
        //    {
        //        if (!(drw.RowState == DataRowState.Deleted))
        //        {
        //            if (drw["idInternal"].ToString() == "0")
        //            {
        //                drw.Delete();
        //                break;
        //            }
        //        }
        //    }
        //    return ds;
        //}
        protected void AddNewItem(object sender, EventArgs e)
        {
            try
            {

               
                string idRecurso = ((TextBox)itemGridView.FooterRow.FindControl("idRecursoInsertTextBox")).Text;
                string idInsumo = ((TextBox)itemGridView.FooterRow.FindControl("idInsumoInsertTextBox")).Text;
                string descripcion = ((TextBox)itemGridView.FooterRow.FindControl("descripcionInsertTextBox")).Text;
                string unidad = ((TextBox)itemGridView.FooterRow.FindControl("unidadInsertTextBox")).Text;
                string cantidadBase = ((TextBox)itemGridView.FooterRow.FindControl("cantidadBaseInsertTextBox")).Text;
                string precioBase = ((TextBox)itemGridView.FooterRow.FindControl("precioBaseInsertTextBox")).Text;
                string totalBase = ((TextBox)itemGridView.FooterRow.FindControl("totalBaseInsertTextBox")).Text;
            
                string precio1 = ((TextBox)itemGridView.FooterRow.FindControl("precio1InsertTextBox")).Text;
                string total1 = ((TextBox)itemGridView.FooterRow.FindControl("total1InsertTextBox")).Text;
            
                string precio2 = ((TextBox)itemGridView.FooterRow.FindControl("precio2InsertTextBox")).Text;
                string total2 = ((TextBox)itemGridView.FooterRow.FindControl("total2InsertTextBox")).Text;
            
                string precio3 = ((TextBox)itemGridView.FooterRow.FindControl("precio3InsertTextBox")).Text;
                string total3 = ((TextBox)itemGridView.FooterRow.FindControl("total3InsertTextBox")).Text;
                string codigo = ((TextBox)itemGridView.FooterRow.FindControl("codigoInsertTextBox")).Text;


                List<ComparativoItemInfo> ds;
                ds = (List <ComparativoItemInfo>) Session[idobjectdsLabel.Value.ToString()];
                ComparativoItemInfo comparativoItem = new ComparativoItemInfo();
                
                string str = Guid.NewGuid().ToString();
                Guid guid = new Guid(str);
                byte[] _bytes = guid.ToByteArray();
                int id = ((int)_bytes[0]) | ((int)_bytes[1] << 8) | ((int)_bytes[2] << 16) | ((int)_bytes[3] << 24);


                //drw["idInternal"] = id;
                //drw["descripcion"] = descripcion;
                //drw["unidad"] = unidad;
                //drw["cantidadBase"] = Convert.ToDecimal(cantidadBase);
                //drw["precioBase"] = Convert.ToDecimal(precioBase);

                //drw["totalBase"] = drw.Field<decimal>("cantidadBase") * drw.Field<decimal>("precioBase");
            
                //drw["precio1"] = Convert.ToDecimal(precio1);
                //drw["total1"] = Convert.ToDecimal(total1);
            
                //drw["precio2"] = Convert.ToDecimal(precio2);
                //drw["total2"] = Convert.ToDecimal(total2);
            
                //drw["precio3"] = Convert.ToDecimal(precio3);
                //drw["total3"] = Convert.ToDecimal(total3);
                //drw["codigo"] = codigo;

                //ds.Tables[comparativoItem.GetType().Name].Rows.Add(drw);
                Session[idobjectdsLabel.Value.ToString()] = ds;
                BindDataItemComparativo();
                BindDataProveedor();
                setEstadistica();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        protected void prov_checkedChanged(object sender, EventArgs e)
        {

        }


        protected void Deleteitem(object sender, EventArgs e)
        {
            try
            {
                ComparativoItemInfo comparativoItem=new ComparativoItemInfo();
                ImageButton lnkRemove = (ImageButton)sender;
                List<ComparativoItemInfo> itemList = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value.ToString()];
                
                var a=itemList.Single(p=>p.idInternal==int.Parse(lnkRemove.CommandArgument.ToString()));

                itemList.Remove(a);


                Session[idobjectdsLabel.Value.ToString()] = itemList;
                BindDataItemComparativo();
                BindDataProveedor();
                setEstadistica();

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        protected void EditItem(object sender, GridViewEditEventArgs e)
        {
            try
            {
                itemGridView.EditIndex = e.NewEditIndex;


                int parent_index = e.NewEditIndex;

                //GridViewRow row = GridView1.Rows[parent_index];
                //string txtRepuestointernalid =
                //    ((Label)itemGridView.Rows[parent_index].FindControl("idInternalLabel")).Text;

               
                BindDataItemComparativo();
                setEditRowItemComparativo(e.NewEditIndex);
                //itemGridView.FooterRow.Visible = false;

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }
        protected void CancelEditItem(object sender, GridViewCancelEditEventArgs e)
        {
            itemGridView.EditIndex = -1;
            BindDataItemComparativo();
           
        }

        //private void cambioMoneda()
        //{
        //    List<ComparativoItemInfo> ItemList = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value];
        //    List<ComparativoProveedorInfo> proveedoresList = (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value];

        //    string simbol1="";
        //    string moneda1="";
        //    string moneda2 = "";
        //    string moneda3 = "";


        //    foreach (ComparativoProveedorInfo pv in proveedoresList)
        //    {
        //        if (proveedoresList.IndexOf(pv) == 1)
        //        {   
        //            moneda1=pv.moneda;
                   
        //        }
        //        if (proveedoresList.IndexOf(pv) == 2)
        //        {   
        //           moneda2=pv.moneda;
        //        }
        //        if (proveedoresList.IndexOf(pv) == 3)
        //        {   
        //            moneda3=pv.moneda;
        //        }
        //    }


        //    foreach (var drw in ItemList)
        //        {
        //                drw.simbol1= simbol1;

        //                drw.precio1Mon= drw.simbol1 + " " + drw.precio1.ToString();
        //                drw.total1Mon = drw.simbol1.ToString() + " " + drw.total1.ToString();
                        
                        
        //                drw.simbol2 = simbol2;
        //                drw.precio2Mon = drw.simbol2.ToString() + " " + drw.precio2.ToString();
        //                drw.total2Mon = drw.simbol2.ToString() + " " + drw.total2.ToString();
                        
        //                drw.simbol3 = simbol3;
        //                drw.precio3Mon = drw.simbol3.ToString() + " " + drw.precio3.ToString();
        //                drw.total3Mon= drw.simbol3.ToString() + " " + drw.total3.ToString();
        //            }
                
         
        //    Session[idobjectdsLabel.Value]=ItemList;
        //}



        protected void ComparativoitemGridView_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if ((ComparativoItemInfo)e.Row.DataItem != null)
                {
                    var a = (ComparativoItemInfo)e.Row.DataItem;
                    //para ambos casos 
                    if (a.totalComparar > a.totalBase)
                    {
                        e.Row.Cells[7].ForeColor = Color.FromName("#CC0000");
                    }

                   
                        //caso de por dinero

                        //proveedor 1
                        if (a.precio1 <= a.precioBase)
                        {
                            //verde
                            e.Row.Cells[7].ForeColor = Color.FromName("#009900");
                            if (a.total1 > a.totalBase)
                            {
                                e.Row.Cells[7].ForeColor = Color.FromName("#CC0000");
                            }
                        }
                        if (a.precio1 > a.precioBase)
                        {

                            //depende si estoy comprando menos
                            if (a.totalBase >= a.total1)
                            {
                                //ambar  segun llegue al monto si  aun no pasa del total  disponible
                                e.Row.Cells[7].ForeColor = Color.FromName("#FF6600");

                            }
                            if (a.totalBase < a.total1)
                            {
                                //rojo segun llegue al monto
                                e.Row.Cells[7].ForeColor = Color.FromName("#CC0000");
                            }

                        }
                        //Proveedor 2
                        if (a.precio2 <= a.precioBase)
                        {
                            //verde
                            e.Row.Cells[8].ForeColor = Color.FromName("#009900");
                            if (a.total2 >= a.totalBase)
                            {
                                e.Row.Cells[8].ForeColor = Color.FromName("#CC0000");
                            }
                        }
                        if (a.precio2 > a.precioBase)
                        {

                            //depende si estoy comprando menos
                            if (a.totalBase >= a.total2)
                            {
                                //ambar  segun llegue al monto si  aun no pasa del total  disponible
                                e.Row.Cells[8].ForeColor = Color.FromName("#FF6600");

                            }
                            if (a.totalBase < a.total2)
                            {
                                //rojo segun llegue al monto
                                e.Row.Cells[8].ForeColor = Color.FromName("#CC0000");
                            }

                        }
                        //proveedor 3


                        //Proveedor 2
                        if (a.precio3 <= a.precioBase)
                        {
                            //verde
                            e.Row.Cells[9].ForeColor = Color.FromName("#009900");
                            if (a.total3 >= a.totalBase)
                            {
                                e.Row.Cells[9].ForeColor = Color.FromName("#CC0000");
                            }
                        }
                        if (a.precio3 > a.precioBase)
                        {

                            //depende si estoy comprando menos
                            if (a.totalBase >= a.total3)
                            {
                                //ambar  segun llegue al monto si  aun no pasa del total  disponible
                                e.Row.Cells[9].ForeColor = Color.FromName("#FF6600");

                            }
                            if (a.totalBase < a.total3)
                            {
                                //rojo segun llegue al monto
                                e.Row.Cells[9].ForeColor = Color.FromName("#CC0000");
                            }

                        }


                   
                }
            }
        }


        protected void ComparativoitemoGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
        {



            if (e.Row.RowType == DataControlRowType.DataRow)
            {


                //control de cambios para no editar los finalizados 
                if (
                    (((ImageButton)e.Row.Cells[10].Controls[0])).CommandName == "Edit" &
                    (((ComparativoItemInfo)(e.Row.DataItem)).idOrdenCompratemRef!=0))
                {
                    (((ImageButton)e.Row.Cells[10].Controls[0])).Visible = false;
                }



                if (e.Row.RowState == System.Web.UI.WebControls.DataControlRowState.Normal | e.Row.RowState == System.Web.UI.WebControls.DataControlRowState.Alternate)
                {
                    //Label gv = (Label)e.Row.FindControl("ControlRowLabel");

                    //gv.Text = String.Empty;
                    //ComparativoItemInfo a = ((ComparativoItemInfo)(e.Row.DataItem));

                    //if (a.bitControlCant)
                    //{
                    //    gv.Text = "Por Unidades";
                    //}
                    //else
                    //{
                    //    gv.Text = "Por Dinero";
                    //}
                }
                else
                {
                    if (e.Row.RowState == (System.Web.UI.WebControls.DataControlRowState.Alternate | System.Web.UI.WebControls.DataControlRowState.Edit))
                    {

                        //RadioButtonList gv = (RadioButtonList)e.Row.FindControl("controlRadioButtonList");
                        //ComparativoItemInfo a = ((ComparativoItemInfo)(e.Row.DataItem));

                        //if (a.bitControlCant)
                        //{
                        //    gv.SelectedValue = "0";
                        //}
                        //else
                        //{
                        //    gv.SelectedValue = "1";
                        //}
                    }

                }




            }
        }
   
      

        protected void UpdateItem(object sender, GridViewUpdateEventArgs e)
        {
            try
            {    
                string idInternal = ((GridView)sender).DataKeys[e.RowIndex].Values[0].ToString();
                List<ComparativoItemInfo> itemList = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value.ToString()];
                var dr = itemList.Single(p => p.idInternal == int.Parse(idInternal));


                string strcantidadComparar = ((TextBox)itemGridView.Rows[e.RowIndex].FindControl("cantidadCompararEditTextBox")).Text;
                string strcantidadBase = ((TextBox)itemGridView.Rows[e.RowIndex].FindControl("cantidadBaseEditTextBox")).Text;
                
           
                //RadioButtonList controlCantidad = ((RadioButtonList)itemGridView.Rows[e.RowIndex].FindControl("controlRadioButtonList"));
                

                //validaciones
                               
                dr.cantidadBase = decimal.Parse(strcantidadComparar);
                dr.totalComparar =Math.Round(dr.cantidadBase * dr.precioBase,4);
                dr.bitControlCant = false;


                itemGridView.Columns[7].Visible = true;
                itemGridView.Columns[8].Visible = true;
                itemGridView.Columns[9].Visible = true;

                string precio1 = ((TextBox)itemGridView.Rows[e.RowIndex].FindControl("precio1EditTextBox")).Text;
                if (precio1 == "") { precio1 = "0"; }
                string total1 = ((TextBox)itemGridView.Rows[e.RowIndex].FindControl("total1EditTextBox")).Text;
                if (total1 == "") { total1 = "0"; }

                string precio2 = ((TextBox)itemGridView.Rows[e.RowIndex].FindControl("precio2EditTextBox")).Text;
                if (precio2 == "") { precio2 = "0"; }
                string total2 = ((TextBox)itemGridView.Rows[e.RowIndex].FindControl("total2EditTextBox")).Text;
                if (total2 == "") { total2 = "0"; }

                string precio3 = ((TextBox)itemGridView.Rows[e.RowIndex].FindControl("precio3EditTextBox")).Text;
                if (precio3 == "") { precio3 = "0"; }
                string total3 = ((TextBox)itemGridView.Rows[e.RowIndex].FindControl("total3EditTextBox")).Text;
                if (total3 == "") { total3 = "0"; }



                //dr.cantidadComparar = decimal.Parse(strcantidadComparar);
                //dr.totalComparar = dr.cantidadComparar * dr.precioBase;
                                dr.totalCompararMon = dr.simbolBase + " " + dr.totalComparar.ToString();
                                
                                dr.precio1= decimal.Parse(precio1);
                               
                                dr.total1= decimal.Parse(total1);
                                

                                                      
                      
                                dr.precio2 = decimal.Parse(precio2);
                              
                                dr.total2 = decimal.Parse(total2);
                              
                     
                                dr.precio3 = decimal.Parse(precio3);
                                
                                dr.total3 = decimal.Parse(total3);
                                
                      
                        

                //var q = 
                //    from a in ds.Tables[comparativoItem.GetType().Name].AsEnumerable().
                //        Where(p=>p.RowState!=DataRowState.Deleted)
                //        where a.Field<int>("idPadre")==int.Parse(idInternal)
                //        select a;
                //if (q.Count()>0)
                //{
                         
                //    foreach(var item in q)
                //    {
                //        //cuadrando cantidad base
                //        decimal cantidadItem = item.Field<decimal>("cantidadBase");
                //        decimal cantidadSumComparar = decimal.Parse(strcantidadComparar);
                //        decimal cantidadSumBase = decimal.Parse(strcantidadSumBase);
                //        decimal precioBase = item.Field<decimal>("precioBase");

                //        item["cantidadComparar"] = cantidadSumComparar * cantidadItem / cantidadSumBase;
                //        item["totalComparar"] = Math.Round(precioBase * item.Field<decimal>("cantidadBase"), 2);  //regla de 3
                //        item["precio1"] = decimal.Parse(precio1);
                //        item["total1"] = dr.First().Field<decimal>("precio1") * item.Field<decimal>("cantidadComparar");


                //        item["precio2"] = decimal.Parse(precio2);
                //        item["total2"] = dr.First().Field<decimal>("precio2") * item.Field<decimal>("cantidadComparar");

                //        item["precio3"] = decimal.Parse(precio3);
                //        item["total3"] = dr.First().Field<decimal>("precio3") * item.Field<decimal>("cantidadComparar");




                //    }
                //}


                                Session[idobjectdsLabel.Value.ToString()] = itemList;

                itemGridView.EditIndex = -1;


          
                BindDataItemComparativo();
                BindDataProveedor();
                setEstadistica();

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        #endregion

     
        protected void refreshButton_Click(object sender, EventArgs e)
        {
        }

        protected void ProvbtnAdd_OnClick(object sender, EventArgs e)
        {

            string script;
            script =
                String.Format("<script languaje=\"javascript\">var opciones=(\"toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,modal=yes," +
                "resizable=1,width=850,height=400\");" +
                      "window.open(\"ProspectoForm.aspx\",\"\",opciones,false);" +
                      "</script>");
            ClientScript.RegisterStartupScript(this.GetType(), "registro de Prospecto", script);

        }

        //protected void estructuraCostoDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        if (((DropDownList)sender).Items.Count > 0)
        //        {
        //            // cargamos las estructuras de costo necesarias 
        //            idEstructuraCosto.Text = ((DropDownList)sender).SelectedValue;
        //            if (idEstructuraCosto.Text != "0")
        //            {

                        

        //                findRecurso();
                            
        //            }

        //        }
        //    }
        //    catch (SqlException sqlex)
        //    {
        //        WebServerSideSqlError.Log(sqlex);
        //        ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
        //         "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


        //    }
        //    catch (Exception ex)
        //    {
        //        WebServerSideError.Log(ex);
        //        ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
        //         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

        //    }
        //}
            

        //private void restricionesFormReadOnly()
        //{

        //    if (!((string)Session["rolid"] == "1"))
        //    {

        //        ((LinkButton)entityFormView.
        //            FindControl("EditButton")).Visible = false;
        //        ((LinkButton)entityFormView.
        //            FindControl("DeleteButton")).Visible = false;

        //        ((LinkButton)entityFormView.
        //           FindControl("NewButton")).Visible = false;
        //    }

        //}

        #region "Add ECItem"

        private void getTipoCambio()
        {
            
                    ////verificar el tipo de cambio del dia
                    System.IFormatProvider MiFp =
                   new System.Globalization.CultureInfo("es-ES", false);

                    DateTime fechaComparativo = DateTime.ParseExact(fechaInsertTextBox.Text, "dd/MM/yyyy", MiFp);


                    Moneda MonedaCambio = DbUtil.Db.Monedas.Single(p => p.idInternal == int.Parse(monedaDropDownList.SelectedValue));
                   MonedaCambio.getTipoCambio(DbUtil.Db, fechaComparativo).ToString();


                   


        }



        protected void accionItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (((Button)sender).ID == AddECSelectBTN.ID)
                {

                    ECItemSeleccionMonPanel1.LoadRecurso(estructuraCostoDDL.SelectedValue.ToInt(),
                                        monedaDropDownList.SelectedValue.ToInt(), 
                                        idobjectdsLabel.Value, "");
                    AddECItemUpdatePanel.Update();
                    AddRecursoPopup.Show();
                }
                if (((Button)sender).ID == addOCSelectBTN.ID)
                {
                    // agregar Sub Contrata

                    List<ComparativoProveedorInfo> comparativoProvList =
                    (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value];

                    if (comparativoProvList.Count > 0)
                    {
                        ECOCPanel1.LoadRecurso(estructuraCostoDDL.SelectedValue.ToInt(),
                                            estructuraCostoDDL.SelectedItem.Text,
                                          comparativoProvList.ElementAt(1).idProveedor,
                                          comparativoProvList.ElementAt(1).descripcion,
                                          monedaDropDownList.SelectedValue.ToInt(),
                                          monedaDropDownList.SelectedItem.Text, idobjectdsLabel.Value);
                        AddOCPopup.Show();
                    }

                   
                   
                }

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
       

        protected void AddRecurso_Click(object sender, EventArgs e)
        {
            
            try
            {
                List<ComparativoItemInfo> ds;
                ds = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value.ToString()];
                

                int count = 0;
                    if (ds.Count() == 0)
                    {
                        count = ds.Count;
                        monedaDropDownList.SelectedValue = ECItemSeleccionMonPanel1.idMoneda.ToString();
                        getTipoCambio();
                    }

               

                if (ECItemSeleccionMonPanel1.ItemLista.Count > 0)
                {
                   
                    foreach (EstructuraCostoItemConfInfo k in ECItemSeleccionMonPanel1.ItemLista)
                    {

                        
                        ComparativoItemInfo CcoItem = bol.GetCompartivoItemFromEComprasItem(k.idInternal,
                                                                    int.Parse(monedaDropDownList.SelectedValue));
                        // antes de ingresar  verificar si  ya existe insumos
                       
                        ds.Add(CcoItem);

                    }
                     if (count > 0)
                       ActualizaTipoCambio();

                 
                }
                Session[idobjectdsLabel.Value.ToString()] = ds;


                BindDataItemComparativo();
                BindDataProveedor();
                setEstadistica();
              
                AddRecursoPopup.Hide();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);
               

            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);
                
            }

        }

        protected void AddOC_Click(object sender, EventArgs e)
        {

            try
            {
                List<ComparativoItemInfo> ds;
                ds = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value.ToString()];


                int count = 0;
                if (ds.Count() == 0)
                {
                    count = ds.Count;
                    getTipoCambio();
                }

                if (ECOCPanel1.SeleccionList.Count > 0)
                {

                    var idsOC =ECOCPanel1.SeleccionList;
                    
                        //traemos las ECItem con todos sus valores
                    var ecitem = from a in DbUtil.Db.EstructuraCostoItems
                                 where idsOC.Contains(a.OrdenCompraItem.OrdenCompra.idInternal)
                                 select a.idInternal;

                     foreach (int k in ecitem)
                    {
                        ComparativoItemInfo CcoItem = bol.GetCompartivoItemFromEComprasItem(k,
                                                             int.Parse(monedaDropDownList.SelectedValue));

                        ComparativoItemInfo CcoItemFin = bol.GetComparativoItemAddOCItem(CcoItem,
                                                                    IncluyeIGVCHK.Checked,
                                                                    1);
                        // antes de ingresar  verificar si  ya existe insumos

                        ds.Add(CcoItem);


                    }
                    if (count > 0)
                        ActualizaTipoCambio();


                }
                Session[idobjectdsLabel.Value.ToString()] = ds;


                BindDataItemComparativo();
                BindDataProveedor();
                setEstadistica();

                AddOCPopup.Hide();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        protected void cancelAddRecurso_Click(object sender, EventArgs e)
        {
            AddRecursoPopup.Hide();
        }
        //private void findRecurso(string orden=default(string))
        //{

        //    ECItemSeleccionMonPanel1.LoadRecurso(3, idobjectdsLabel.Value, orden);
        //    AddECItemUpdatePanel.Update();
        //}
      

       
  #endregion




             

      

        private void ActualizaTipoCambio()
        {
            getTipoCambio();

            actualizatipoCambio(int.Parse(monedaDropDownList.SelectedValue));

          


        }



        private void actualizatipoCambio(int idmoneda)
        {

            var simbol = DbUtil.Db.Monedas.Single(p => p.idInternal == idmoneda).simbol;
                         
          
                List<ComparativoItemInfo> itemList = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value];

                decimal tipoCambio = 1;
                if (idmoneda == 4)
                {
                    tipoCambio = DbUtil.Db.Obras.Single(p => p.idInternal == idObra.Value.ToInt2()).tipoCambio.Value;
                }
               
                foreach (var a in itemList)
                {
                    decimal tipoCambioNew = tipoCambio;
                    if (a.idInternal == 0)
                    {
                        continue;
                    }

                    
                    //si el tipo de cambio   debemos conservar el valor original
                    a.simbol1 = simbol;
                 
                    a.precio1 = Math.Round((a.precio1*a.tipoCambio) / tipoCambioNew, 4);
                    a.precio2 = Math.Round((a.precio2*a.tipoCambio) /  tipoCambioNew, 4);
                    a.precio3 = Math.Round((a.precio3*a.tipoCambio) /  tipoCambioNew, 4);
                  
                    a.precioBase = Math.Round((a.precioBase * a.tipoCambio)/ tipoCambioNew, 4);
                    a.precioBaseMon = simbol + " " + a.precioBase.ToString();



                    a.total1 = Math.Round(a.precio1 * a.cantidadBase, 4);
                    

                    a.total2 = Math.Round(a.precio2 * a.cantidadBase, 4);
                   

                    a.total3 = Math.Round(a.precio2 * a.cantidadBase, 4);
                  


                    a.totalBase = Math.Round((a.totalBase * a.tipoCambio)/ tipoCambioNew, 4);
                    a.totalBaseMon = simbol + " " + a.totalBase;

                    a.totalComparar = Math.Round((a.totalComparar* a.tipoCambio)/ tipoCambioNew, 4);
                    a.totalCompararMon = simbol + " " + a.totalComparar;

                    a.totalBaseOrig = Math.Round((a.totalBaseOrig * a.tipoCambio)/  tipoCambioNew, 4);
                    a.totalBaseMonOrig = simbol + " " + a.totalBaseOrig;


                    a.simbolBase = simbol;
                   
                    a.tipoCambio = tipoCambioNew; //importante para guardar rasto para el recalculo
                   
                    

                }

                Session[idobjectdsLabel.Value] = itemList;

            BindDataItemComparativo();
            BindDataProveedor();
            setEstadistica();


        }


        private void updateTipoCambioToBase()
        {

               //default

           
            monedaDropDownList.SelectedValue = "3";
           
           actualizatipoCambio(int.Parse(monedaDropDownList.SelectedValue));

                BindDataItemComparativo();
                BindDataProveedor();
                setEstadistica();
            
        }

        #region "Item Proveedor"


        private void BindDataProveedor()
        {

            List<ComparativoProveedorInfo> proveedorItem =
                (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value.ToString()];

            List<ComparativoItemInfo> cpitemList = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value];

            var moneda = DbUtil.Db.Monedas.Single(p => p.idInternal == monedaDropDownList.SelectedValue.ToInt());
            
            if (proveedorItem.Count == 0)
            {
                ComparativoProveedorInfo itemcero = new ComparativoProveedorInfo();
                itemcero.idInternal = 0;
                itemcero.total = 0;

                proveedorItem.Add(itemcero);
            }
            


            if (cpitemList.Count > 0)
            {
                //var a=proveedorItem.Where(p => p..item == 1);
                //foreach (ComparativoProveedorInfo a in proveedorItem) ;

                decimal total1=cpitemList.Sum(p => p.total1);
                decimal total2=cpitemList.Sum(p=>p.total2);
                decimal total3=cpitemList.Sum(p=>p.total3);

                

                for (int i = 1; i < proveedorItem.Count(); i++)
                {
                    string total = "total" + i.ToString();
                    ComparativoProveedorInfo a = proveedorItem.ElementAt(i);
                    if (i==1)
                    {
                        //a.tipoCambio = decimal.Parse(tipoCambioContratoLabel.Text);
                        a.simbol = moneda.simbol;
                        itemGridView.Columns[7].HeaderText = proveedorItem[1].descripcion;


                        a.total =total1;
                        a.totalContrMon = string.Format("{0} {1:N}", a.simbol, a.total);
                    }
                    if (i==2)
                    {
                        //a.tipoCambio = decimal.Parse(tipoCambioContratoLabel.Text);
                        a.simbol = moneda.simbol;
                        itemGridView.Columns[8].HeaderText = proveedorItem[2].descripcion;

                       
                        a.total = total2;
                        a.totalContrMon = string.Format("{0} {1:N}", a.simbol, a.total);
                        
                    }
                    if (i == 3)
                    {
                        //a.tipoCambio = decimal.Parse(tipoCambioContratoLabel.Text);
                        a.simbol = moneda.simbol;
                        itemGridView.Columns[9].HeaderText = proveedorItem[3].descripcion;

                        a.total = total3;
                        a.totalContrMon = string.Format("{0} {1:N}", a.simbol, a.total);
                    }
                    
                }
              
                
            }
            itemGridView.Columns[7].Visible = false;
            //proveedor2
            itemGridView.Columns[8].Visible = false;
            //proveedor3
            itemGridView.Columns[9].Visible = false;

            for (int i = 1; i < proveedorItem.Count(); i++)
            {
                itemGridView.Columns[i + 6].Visible = true;
            }

            Session[idComparativoProveedorList.Value.ToString()] = proveedorItem;
           
            proveedorGridView.DataSource = proveedorItem;
            proveedorGridView.DataBind();


            if (proveedorGridView.DataKeys[0].Values[0].ToString() == "0")
            { proveedorGridView.Rows[0].Visible = false; }

            setFooterRowProveedor();
            proveedorGridView.FooterRow.Visible = true;
            if (proveedorItem.Count > 3)
            {
                proveedorGridView.FooterRow.Visible = false;
            }
           
            if (cpitemList.Where(p => p.idOrdenCompratemRef != 0).Count() > 0)
            {
                proveedorGridView.FooterRow.Visible = false;
            }
           

            proveedorUpdatePanel.Update();

        }

        protected void DeleteProveedorItem(object sender, EventArgs e)
        {
            try
            {

                ImageButton lnkRemove = (ImageButton)sender;
                int idInternal = int.Parse(lnkRemove.CommandArgument.ToString());
                List<ComparativoProveedorInfo> comparativoProveedorList =
                    (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value.ToString()];

                ComparativoProveedorInfo drw = comparativoProveedorList.Single(p => p.idInternal == idInternal);

                //eliminamos de la coleccion

                comparativoProveedorList.Remove(drw);
                Session[idComparativoProveedorList.Value.ToString()] = comparativoProveedorList;

               
            

               

                BindDataProveedor();
                BindDataItemComparativo();
                setEstadistica();


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        private void AddProveedor(
                                                        int idProveedor,
                                                        string descripcion,
                                                        string condicion,
                                                        Moneda moneda,
                                                        int idFormaPago,
                                                        string formatPagoStr)
        {


            List<ComparativoProveedorInfo> comparativoProvList =
               (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value];

            ComparativoProveedorInfo item = new ComparativoProveedorInfo();

           // Moneda moneda = DbUtil.Db.Monedas.Single(p => p.idInternal == int.Parse(monedaDropDownList.SelectedValue));

            item.idInternal = Parametros.GenerarID();
            item.idProveedor = idProveedor;
            item.descripcion = descripcion;
            item.condicion = condicion;
            item.idMoneda = moneda.idInternal;
            item.simbol = moneda.simbol;
            item.moneda = moneda.descripcion;
            item.idFormaPago = idFormaPago;
            item.formaPago = formatPagoStr;
            item.total = 0;

            comparativoProvList.Add(item);
            Session[idComparativoProveedorList.Value.ToString()] = comparativoProvList;
            //para el ingreso de  proveedores  mostramos las columnas necesarioas
            //proveedor1
            itemGridView.Columns[5].Visible = false;
            //proveedor2
            itemGridView.Columns[6].Visible = false;
            //proveedor3
            itemGridView.Columns[7].Visible = false;

            for (int i = 1; i <= comparativoProvList.Count(); i++)
            {
                itemGridView.Columns[i + 4].Visible = true;
            }

        }
                                                                                   

        protected void AddProveedorItem(object sender, EventArgs e)
        {
            try
            {

               


                string idProveedor =
                    ((TextBox)proveedorGridView.FooterRow.FindControl("idproveedorInsertTextBox")).Text;
                string descripcion =
                    ((TextBox)proveedorGridView.FooterRow.FindControl("proveedorInsertTextBox")).Text;
                string condicion = ((TextBox)proveedorGridView.FooterRow.FindControl("condicionInsertTextBox")).Text;
                
                //DropDownList monedaDDL = ((DropDownList)proveedorGridView.FooterRow.FindControl("monedaInsertDropDownList"));
                DropDownList formaPagoDDL = ((DropDownList)proveedorGridView.FooterRow.FindControl("formaPagoInsertDropDownList"));
                

                if (idProveedor == "")
                {
                    throw new Exception("ingrese Proveedor Correcto");
                }
              Moneda moneda = DbUtil.Db.Monedas.Single(p => p.idInternal == int.Parse(monedaDropDownList.SelectedValue));

              AddProveedor( idProveedor.ToInt(), 
                            descripcion, 
                            condicion, moneda, 
                            formaPagoDDL.SelectedValue.ToInt(),
                            formaPagoDDL.SelectedItem.Text);


                BindDataItemComparativo();
                BindDataProveedor();
                setEstadistica();
                
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        protected void UpdateProveedorItem(object sender, GridViewUpdateEventArgs e)
        {
            try
            {
                GridView gv = ((GridView)sender);
                string idProveedor =
                    ((TextBox)gv.Rows[e.RowIndex].FindControl("idproveedorEditTextBox")).Text;
                string proveedor =
                    ((TextBox)gv.Rows[e.RowIndex].FindControl("proveedorEditTextBox")).Text;
                string condicion =
                    ((TextBox)gv.Rows[e.RowIndex].FindControl("condicionEditTextBox")).Text;

                
                int idinternal = int.Parse(gv.DataKeys[e.RowIndex].Values[0].ToString());

               // DropDownList monedaDDL = ((DropDownList)gv.Rows[e.RowIndex].FindControl("monedaEditDropDownList"));
                DropDownList formaPagoDDL = ((DropDownList)gv.Rows[e.RowIndex].FindControl("formaPagoEditDropDownList"));


                List<ComparativoProveedorInfo> itemList = (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value];

                ComparativoProveedorInfo item = itemList.Single(p => p.idInternal == idinternal);
                //Moneda moneda = new Moneda();



                //using (dbGestionDataContext _db = new dbGestionDataContext(Parametros.strConnString))
                //{
                //    moneda = _db.Moneda.Single(p => p.idInternal == int.Parse(monedaDropDownList.SelectedValue));


                //}


                item.idProveedor = int.Parse(idProveedor);
                item.descripcion = proveedor;
                item.condicion = condicion;
                //item.idMoneda = moneda.idInternal;
                //item.moneda = moneda.descripcion;
                //item.simbol = moneda.simbol;
                item.formaPago = formaPagoDDL.SelectedItem.Text;
                item.idFormaPago = int.Parse(formaPagoDDL.SelectedValue);



                Session[idComparativoProveedorList.Value.ToString()] = itemList;

                gv.EditIndex = -1;

                BindDataItemComparativo();
                BindDataProveedor();
                setEstadistica();


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        protected void EditProveedorItem(object sender, GridViewEditEventArgs e)
        {
            try
            {
                proveedorGridView.EditIndex = e.NewEditIndex;
                BindDataProveedor();
                setEditRowProveedor(e.NewEditIndex);
                proveedorGridView.FooterRow.Visible = false;
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        protected void CancelProveedorItem(object sender, GridViewCancelEditEventArgs e)
        {
            try
            {
                proveedorGridView.EditIndex = -1;
                BindDataProveedor();


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }
        private void setEditRowProveedor(int i)
        {
            List<FormaPago> formaPagoList = DbUtil.Db.FormaPago.ToList();
            

            DropDownList formaPagoDropDownList = ((DropDownList)proveedorGridView.Rows[i].FindControl("formaPagoEditDropDownList"));

            
            TextBox formaPagoText = ((TextBox)proveedorGridView.Rows[i].FindControl("formaPagoEditTextBox"));



            formaPagoDropDownList.DataValueField = "idInternal";
            formaPagoDropDownList.DataTextField = "descripcion";
            formaPagoDropDownList.DataSource = formaPagoList;
            formaPagoDropDownList.DataBind();

            
            formaPagoDropDownList.SelectedValue = formaPagoText.Text;


        }


        private void setFooterRowProveedor()
        {
            List<FormaPago> formaPagoList = DbUtil.Db.FormaPago.ToList();
            

            
            DropDownList formaPagoDropDownList = ((DropDownList)proveedorGridView.FooterRow.FindControl("formaPagoInsertDropDownList"));



            formaPagoDropDownList.DataValueField = "idInternal";
            formaPagoDropDownList.DataTextField = "descripcion";
            formaPagoDropDownList.DataSource = formaPagoList;
            formaPagoDropDownList.DataBind();




        }
       

        private void setEditRowItemComparativo(int i)
        {

           

        }
        
        

        private void DataBoundProveedorItem(object sender, EventArgs e)
        {

            if (proveedorGridView.ShowFooter == true)
            {
                setFooterRowProveedor();

            }
           

        }

        #endregion

        //protected void monedaddl_OnSelectedIndexChanged(object sender, EventArgs e)
        //{

        //    tipoCambioContratoLabel.Text = "1";

        //    if (ECItemSeleccionMonPanel1.idMoneda == 4)
        //    {

        //        var Obra = DbUtil.Db.Obras.Single(p => p.idInternal == int.Parse(idObra.Value));

                    
        //            tipoCambioContratoLabel.Text = Obra.tipoCambio.Value.ToString();


        //    }
          
        //    findRecurso();

        //}

       #region "Item del proveedor "

       

        //protected void subContrataItem_Click(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        // valors  para  ingreso de contrato
        //        List<ComparativoProveedorInfo> proveedorList= 
        //            (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value];

        //        List<ComparativoItemInfo> ds = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value];

        //        if (ds.Tables["ComparativoItemInfo"].Rows.Count > 1)
        //        {

        //            proveedor1ContrLabel.Text = "";// string.Empty;
        //            simbol1Label.Text = string.Empty;

        //            proveedor2ContrLabel.Text = string.Empty;
        //            simbol2Label.Text = string.Empty;

        //            proveedor3ContrLabel.Text = string.Empty;
        //            simbol3Label.Text = string.Empty;

        //            totalBaseContrTextBox.Text = string.Empty;
        //            simboloBaseContrLabel.Text = string.Empty;
        //            idMonedaBaseContrTextBox.Text = string.Empty;

        //            total1ContrInsertTextBox.Enabled = false;
        //            total2ContrInsertTextBox.Enabled = false;
        //            total3ContrInsertTextBox.Enabled = false;


        //            foreach (var proveedor in proveedorList)
        //            {
        //                if (proveedorList.IndexOf(proveedor) == 1)
        //                {
        //                    proveedor1ContrLabel.Text = proveedor.descripcion;
        //                    total1ContrInsertTextBox.Enabled = true;
        //                    simbol1Label.Text = proveedor.simbol.ToString();
        //                }
        //                if (proveedorList.IndexOf(proveedor) == 2)
        //                {
        //                    proveedor2ContrLabel.Text = proveedor.descripcion;
        //                    simbol2Label.Text = proveedor.simbol.ToString();
        //                    total2ContrInsertTextBox.Enabled = true;
        //                }
        //                if (proveedorList.IndexOf(proveedor) == 3)
        //                {
        //                    proveedor3ContrLabel.Text = proveedor.descripcion;
        //                    simbol3Label.Text = proveedor.simbol.ToString();
        //                    total3ContrInsertTextBox.Enabled = true;
        //                }

        //            }

        //            var item = from a in ds.Tables["ComparativoItemInfo"].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
        //                       where a.Field<bool>("bitSel") == true
        //                       select a;

        //            if (item.Count() > 0)
        //            {
        //                totalBaseContrTextBox.Text = item.Sum(p => p.Field<decimal>("totalComparar")).ToString();
        //                simboloBaseContrLabel.Text = item.ElementAt(1).Field<string>("simbolBase");
        //                idMonedaBaseContrTextBox.Text = item.ElementAt(1).Field<int>("idMonedaBase").ToString();
        //            }

        //            itemContratoUpdatePanel.Update();
        //            ContrataPopup.Show();
        //        }
        //    }
        //    catch (SqlException sqlex)
        //    {
        //        WebServerSideSqlError.Log(sqlex);
        //        ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
        //         "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


        //    }
        //    catch (Exception ex)
        //    {
        //        WebServerSideError.Log(ex);
        //        ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
        //         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

        //    }
        //}

      

        //protected void ButtonItemCancel_Click(object sender, EventArgs e)
        //{

        //    ContrataPopup.Hide();

        //}

        //protected void ButtonitemContratoAdd_Click(object sender, EventArgs e)
        //{
           
        //    try
        //    {
 
        //    List<ComparativoItemInfo> ds = (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value];


        //    //1 primero buscamos todas las  registros que tiene el mismo codigo


        //    var coltemplate =
        //        from i in ds.Tables["ComparativoItemInfo"].AsEnumerable().Where(drw => drw.RowState != DataRowState.Deleted)
        //         select i;

        //    // verificamos  que pueda ser agrupado 
        //    if (coltemplate.Count() == 1)
        //    {
        //        throw new Exception("No existe recursos por Contratar");
        //    }

          
        //           DataRow drwnew= ds.Tables["ComparativoItemInfo"].NewRow();


        //           drwnew["idInternal"] = Parametros.GenerarID();
        //            drwnew["idEstructuraCostoItem"]=0;
        //            drwnew["codigo"]=CodigoContrTextBox.Text;
        //            drwnew["descripcion"]=recursoInsertTextBox.Text;
        //            drwnew["unidad"]=UnidadContrTextBox.Text;
        //            drwnew["bitSel"]=true;
        //            drwnew["idPadre"]=0;
        //            drwnew["nivel"]=0;
        //            drwnew["cantidadBase"]=1;
        //            drwnew["totalComparar"]=totalBaseContrTextBox.Text;
        //            drwnew["monedaBase"]=idMonedaBaseContrTextBox.Text;
        //            drwnew["simbolBase"]=simboloBaseContrLabel.Text;

        //            drwnew["totalBaseMon"]=simboloBaseContrLabel.Text+" "+totalBaseContrTextBox.Text;
        //            drwnew["totalCompararMon"]=simboloBaseContrLabel.Text+" "+totalBaseContrTextBox.Text;
        //            drwnew["precioBaseMon"]=simboloBaseContrLabel.Text+" "+totalBaseContrTextBox.Text;

        //            if (total1ContrInsertTextBox.Text != string.Empty)
        //            {
        //                drwnew["total1Mon"] = simbol1Label.Text + " " + total1ContrInsertTextBox.Text;
        //                drwnew["total1"] = total1ContrInsertTextBox.Text;
        //                drwnew["precio1"] = total1ContrInsertTextBox.Text;
        //                drwnew["precio1Mon"] = simbol1Label.Text + " " + total1ContrInsertTextBox.Text;
        //                drwnew["simbol1"] = simbol1Label.Text;
        //            }
        //            if (total2ContrInsertTextBox.Text != string.Empty)
        //            {
        //                drwnew["total2Mon"] = simbol2Label.Text + " " + total2ContrInsertTextBox.Text;

        //                drwnew["total2"] = total2ContrInsertTextBox.Text;
        //                drwnew["precio2"] = total2ContrInsertTextBox.Text;
        //                drwnew["precio2Mon"] = simbol2Label.Text + " " + total2ContrInsertTextBox.Text;
        //                drwnew["simbol2"] = simbol2Label.Text;
        //            }
        //            if (total3ContrInsertTextBox.Text != string.Empty)
        //            {
        //                drwnew["total3Mon"] = simbol3Label.Text + " " + total3ContrInsertTextBox.Text;
        //                drwnew["total3"] = total3ContrInsertTextBox.Text;
        //                drwnew["precio3"] = total3ContrInsertTextBox.Text;
        //                drwnew["precio3Mon"] = simbol3Label.Text + " " + total3ContrInsertTextBox.Text;
        //                drwnew["simbol3"] = simbol3Label.Text;
        //            }

        //            foreach (var item in coltemplate)
        //            {
        //                item["nivel"] = 1;
        //                item["idPadre"] = drwnew["idInternal"];
        //                item["bitsel"] = false;
        //            }

        //         ds.Tables["ComparativoItemInfo"].Rows.Add(drwnew);
        //         Session[idobjectdsLabel.Value.ToString()] = ds;
        //            BindDataItemComparativo();


                   

                 
        //    }
        //    catch (SqlException sqlex)
        //    {
        //        WebServerSideSqlError.Log(sqlex);
        //        ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
        //         "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


        //    }
        //    catch (Exception ex)
        //    {
        //        WebServerSideError.Log(ex);
        //        ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
        //         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

        //    }

        //}

       #endregion

        protected void monedaDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (monedaDropDownList.Items.Count > 0)
                {
                    //ActualizaTipoCambio todo LosFormatter item comparativo a la moneda ingresada

                    ActualizaTipoCambio();
                }

            }
            catch (SqlException sqlex)
            {

                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {

                updateTipoCambioToBase();
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

        
       
        protected void fechaInsertTextBox_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (monedaDropDownList.Items.Count > 0)
                {
                    //ActualizaTipoCambio todo LosFormatter item comparativo a la moneda ingresada
                
                    ActualizaTipoCambio();
                }

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                updateTipoCambioToBase();
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

          private void Insertar(int idProveedor)
          {

              //saveButton.Enabled = false;

              System.IFormatProvider MiFp =
                  new System.Globalization.CultureInfo("es-ES", false);

              List<ComparativoProveedorInfo> proveedorItem =
              (List<ComparativoProveedorInfo>)Session[idComparativoProveedorList.Value];

              List<ComparativoItemInfo> ComparativoItem =
                    (List<ComparativoItemInfo>)Session[idobjectdsLabel.Value];


              ComparativoBL objectBL = new ComparativoBL();

              int id = objectBL.add(estructuraCostoDDL.SelectedValue.ToInt(),
                  DateTime.ParseExact(fechaInsertTextBox.
                      Text, "dd/MM/yyyy", MiFp),
                  descripcionInsertTextBox.Text,
                  observacionesInsertTextBox.Text,
                  Convert.ToInt32(int.Parse(idObra.Value)),
                  int.Parse(monedaDropDownList.SelectedValue),
                  idProveedor,
                  ComparativoItem,
                  proveedorItem);



              if (id > 0)
              {
                  internalid.Value = id.ToString();
                  Response.Redirect("ComparativoReadForm.aspx?id=" + internalid.Value + "&idObra=" + idObra.Value, false);
              }
          }
        protected void aceptarSelecProvButton_Click(object sender, EventArgs e)
        {
            // verficamoes que existe Proveedor Seleccionado
            //calcular el total
            try
            {
                seleccionPopupExtender.Hide();
                Insertar(int.Parse(ProveedorRadioButtonList.SelectedValue));
                
            }
            catch (SqlException sqlex)
            {

                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {

                
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        protected void estructuraCostoDDL_Selected(object sender, EventArgs e)
        {
            try
            {

                estructuraCostoHLK.Text = estructuraCostoDDL.SelectedItem.Text;
                estructuraCostoHLK.NavigateUrl =
                    "../EstructuraCompras/EstructuraCostoEditForm.aspx?id={0}&idObra={1}".Fmt(estructuraCostoDDL.SelectedValue.ToInt(),
                    idObra.Value);
                    
            }
            catch (SqlException sqlex)
            {

                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {


                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

        

    }

}
